package Proyecto_2;

import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JPanel;

import Excepciones.BoundaryViolationException;
import Excepciones.InvalidPositionException;
import TDALista.Position;

public class Mapa extends JPanel {
	
	protected int ancho, alto;
	protected Juego juego;
	
	public Mapa(String dirMapa){
		juego = new Juego (dirMapa);
		repaint();
	}
	
	public void paint(Graphics g){
		
        super.paint(g);
        int posX = 0, posY = 0;
        Graphics2D g2d = (Graphics2D)g;
        Position<Transitable> aux = juego.getTransitables().first();
        Position<NoTransitable> auxN = juego.getNoTransitables().first();
      
        int index = 0;
        try {
                while (aux != juego.getTransitables().last()){
                    
                    posX = aux.element().GetX() * aux.element().getGrafica().getWidth();
                    posY = aux.element().GetY() * aux.element().getGrafica().getHeight();
                    g2d.drawImage(aux.element().getGrafica().ObtenerImagen(), posX, posY, this);
					
                    if ( aux.element().HayColeccionable() )
                        g2d.drawImage(aux.element().GetColeccionable().getGrafica().ObtenerImagen(), posX, posY, this);
                    
                    if ( aux.element().HayObjeto() )
                    	g2d.drawImage(aux.element().GetObjeto().getGrafica().ObtenerImagen(), posX, posY, this);
                    
                    if ( aux.element().HayPremio() )
                    	g2d.drawImage(aux.element().GetPremio().getGrafica().ObtenerImagen(), posX, posY, this);
                    
                    aux = juego.getTransitables().next(aux);
					
                }
                if (aux == juego.getTransitables().last()){
                	posX = aux.element().GetX() * aux.element().getGrafica().getWidth();
                    posY = aux.element().GetY() * aux.element().getGrafica().getHeight();
                    g2d.drawImage(aux.element().getGrafica().ObtenerImagen(), posX, posY, this);
					
                }
                
                while (auxN != juego.getNoTransitables().last()){
                	posX = auxN.element().GetX() * auxN.element().getGrafica().getWidth();
                    posY = auxN.element().GetY() * auxN.element().getGrafica().getHeight();
                    g2d.drawImage(auxN.element().getGrafica().ObtenerImagen(), posX, posY, this);
					auxN = juego.getNoTransitables().next(auxN);
					
                }
                
                if (auxN == juego.getNoTransitables().last()){
                	posX = auxN.element().GetX() * auxN.element().getGrafica().getWidth();
                    posY = auxN.element().GetY() * auxN.element().getGrafica().getHeight();
                    g2d.drawImage(auxN.element().getGrafica().ObtenerImagen(), posX, posY, this);
					
                }
        
        } catch (InvalidPositionException
				| BoundaryViolationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
	
}
